#写函数，计算传⼊的字符串中数字，字⺟，空格，以及其他的个数
def func (s):
    al_num = 0
    space_num = 0
    digit_num = 0
    other_num = 0

    for i in s:
        if i.isdigit():                 #isdigit()方法用于检测字符串是否仅由数字字符组成
            digit_num += 1
        elif i.isspace():               #isspace()方法用来判断空格
            space_num += 1
        elif 'a' <= i.lower() <= 'z':   #  原代码为 elif i.isalpha(): 造成结果返回错误，未区分ASCLL码，导致中文归类为字符而不是其他类
            al_num += 1                 #lower()将字符转换为小写，再进行比较
        else:               
            other_num += 1
    return(al_num,space_num,digit_num,other_num)        #返回结果需要与流程控制中各个功能顺序相同


result = func("123 ss 我是")
print(result)


# 写函数，判断⽤⼾传⼊的对象（字符串，列表，元组）⻓度是否⼤于5
def func (s,lis,tup):

    char_str = len(s)                 # len()取得各个数据结构值
    lis_01 = len(lis)
    tupl = len(tup)

    if char_str > 5 :                 #比较
        print("大于5")
    else :
        print("小于5")
    if lis_01 > 5 :
        print("大于5")
    else :
        print("小于5")
    if tupl > 5 :
        print("大于5")
    else :
        print("小于5")    
    return(char_str,lis_01,tupl)            # 可有可无，可以无返回值


result =func('ddddd',[1,2,3,4,5,6],{1,2,3})   #此函数自带输出，所以不用输出，直接函数内填入数据就可




#写函数监测⽤⼾传⼊的对象（字符，列表，元组）的每⼀个元素是否有空内容
def func(s) :
    for i in s :                    # 遍历参数s中的每个元素（s可以是字符串/列表/元组等可迭代对象）

        i = str(i)                  #将当前元素i强制转换为字符串类型（确保后续操作都是字符串操作）
        
        if ' ' in i:                #检查转换后的字符串中是否包含空格字符
            return ('空格', i)
        else :
            return ('没空格')


a = ('d ddd asd',)          #注意单值元组格式为('元素1',)一定要加逗号，不然会被python认定为字符串
result = func(a)            #不加逗号会被认定为字符串，返回值必定是没有空格，因为会字符串被for循环为强转为单个字符，判断结果必定为没空格
print(result)



#写函数，检查传⼊列表的⻓度，如果⼤于2，那么仅仅保留前两个⻓度的内容，并将新内容返回给调⽤者
def func(lis):
    l_lis = len(lis)             # 获得列表长度

    lis01 = []                   # 定义新列表

    if l_lis > 2 :               # 判断传入列表是否长度大于2     

        for i in lis[:2]:        # 注意哦！！列表是没有range的，如果需要截取前两位需要使用切片哦      
            lis01.append(i)      # 循环为新列表赋值
        return lis01
    else:
        return lis               # 如果没有超过2个长度，直接返回原列表

a = [1,2,3,4,5]
result = func(a)
print(result)



#写函数，检查获取传⼊列表或元组的所有奇数位索引对应的元素，并将其作为新列表返回给调⽤者
def func(s) :                 # 1,3,5,7,9  切片大法  lis[1::2]从索引1开始步长为2
    lis01 = s [1::2]
    return lis01              # 不要忘记返回值

lis = [0,1,2,3,4,5,6,7] 
result = func(lis)
print(result)





#写函数，计算传⼊字符串中的【数字】、【字⺟】、【空格】和【其他】的个数
def func(str) :
    digit_num = 0
    al_num = 0
    space_num = 0
    other_num = 0

    for i in str :
        if i.isdigit() :
            digit_num += 1
        elif 'a' <= i.lower() <= 'z' :
            al_num += 1
        elif i.isspace() :
            space_num += 1
        else :
            other_num += 1
    return(digit_num,al_num,space_num,other_num)


a = ("a sdd 我的 *@#")
result = func(a)
print(result)